home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-07-07 | 3.4 KB | 124 lines | [TEXT/ALFA] |
- # FILE: number.tcl
- #
- # LAST UPDATE: 01/06/93 4:27:56 AM
- #
- # This file contains the following TCL procedure(s):
- #
- # number -- Returns Roman or alphabetic equivalent numerals
- #
- # This proc is useful with electricAlias definitions as follows:
- #
- # electricAlias def •Text •i "§«set item 1; number \$item i»."
- # electricAlias def •Text •ii "§«incr item; number \$item i». "
- # electricAlias def •Text •I "§«set item 1; number \$item I»."
- # electricAlias def •Text •II "§«incr item; number \$item I». "
- # electricAlias def •Text •a "§«set item 1; number \$item a»."
- # electricAlias def •Text •aa "§«incr item; number \$item a». "
- # electricAlias def •Text •A "§«set item 1; number \$item A»."
- # electricAlias def •Text •AA "§«incr item; number \$item A». "
- #
- # USAGE:
- #
- # number VALUE STYLE
- #
- # WHERE:
- #
- # VALUE = positive whole number 1.. (Roman limited to 9999)
- # STYLE = a|alpha|alphabetic|i|roman|A|ALPHA|ALPHABETIC|I|ROMAN
- #
- # EXAMPLE:
- #
- # [number 1992 ROMAN] returns "MCMXCII"
- #
- # To use, simply source this file place it in the a folder with the
- # name $HOME:Tcl:Usercode: and invoke it implicitly via the "unknown proc".
- #
- # SEE ALSO unknown.tcl, electricAlias.tcl
-
- # COPYRIGHT:
- #
- # Copyright © 1992,1993 by David C. Black
- # All rights reserved.
- #
- # Redistribution and use in source and binary forms are permitted
- # provided that the above copyright notice and this paragraph are
- # duplicated in all such forms and that any documentation,
- # advertising materials, and other materials related to such
- # distribution and use acknowledge that the software was developed
- # by David C. Black.
- #
- # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- #
- ################################################################################
-
- # AUTHOR
- #
- # David C. Black
- # Internet: black@mpd.tandem.com (preferred)
- # GEnie: D.C.Black
- # USnail: 6217 John Chisum Lane, Austin, TX 78749
- #
- ################################################################################
-
- # HISTORY
- #
- # modified who rev reason
- # -------- --- --- ------
- # 01/06/93 DCB 1.0 Original
-
- proc number {value {style I}} {
- if {$value <= 0} {
- error "Must be a counting number"
- }
- if {[string first "." $value] >= 0} {
- error "Must be an integral value"
- }
- case $style {
- {a alpha alphabetic A ALPHA ALPHABETIC} {
- incr value -1
- set result [format "%c" [expr {$value % 26 + 0x41}]]
- set value [expr {$value / 26}]
- while {$value > 0} {
- set digit [expr {$value % 26 + 0x40}]
- set value [expr {$value / 26}]
- set result [format "%c%s" $digit $result]
- }
- }
- {i roman I ROMAN} {
- if {$value > 9999} {
- "Roman numeral too big"
- }
- set rlist {
- {"" I II III IV V VI VII VIII IX}
- {"" X XX XXX XL L LX LXX LXXX XC}
- {"" C CC CCC CD D DC DCC DCCC CM}
- {"" M MM MMM MV_ V_ VM_ VMM_ VMMM_ MX_}
- }
- set result ""
- set ten 0
- while {$value > 0} {
- set digit [lindex [lindex $rlist $ten] [expr {$value % 10}]]
- set value [expr {$value / 10}]
- incr ten
- set result "$digit$result"
- }
- }
- default {
- error "Unknown numbering style"
- }
- }
- case $style {
- {a alpha alphabetic i roman} {
- return [string tolower $result]
- }
- {A ALPHA ALPHABETIC I ROMAN} {
- return $result
- }
- }
- }
- #endproc number
- ################################################################################
-
-